package tournoi.stateless;

import java.util.List;
import java.util.Set;

import tournoi.modele.*;

/**
 * 
 * Interface définissant les fonctions accessibles depuis l'ejb TournoiFacade
 * 
 * @author Florent Champigny, Kevin De Jesus Ferreira and Julien Mialon
 * 
 */
public interface TournoiFacade {

	/**
	 * Ajoute un arbitre au tournoi
	 * 
	 * @param arbitre
	 *            - Arbitre à ajouter
	 */
	public void addArbitre(Arbitre arbitre);

	/**
	 * Ajoute des arbitres au tournoi
	 * 
	 * @param arbitres
	 *            - Arbitres à ajouter
	 */
	public void addArbitres(Set<Arbitre> arbitres);

	/**
	 * Ajoute une equipe au tournoi
	 * 
	 * @param nom
	 *            nom de l'equipe
	 * @param joueurs
	 *            joueurs de l'equipe
	 */
	public void addEquipe(String nom, Set<Joueur> joueurs);

	/**
	 * Affecte un arbitre a un match du tournoi
	 * 
	 * @param match_id
	 *            id du match
	 * @param arbitre_id
	 *            id de l'arbitre
	 */
	public void affecterArbitreMatch(int match_id, int arbitre_id);

	/**
	 * Ajout un but marque par un joueurs lors d'un match
	 * 
	 * @param match_id
	 *            id du match
	 * @param minute
	 *            minute a laquelle le but a ete marque
	 * @param type_but
	 *            type du but, peut etre :TEMPSREGLEMENTAIRE, PROLONGATION ou
	 *            TIRAUBUT
	 * @param joueur_id
	 *            identidiant du butteur
	 */
	public void ajouterBut(int match_id, int minute, int type_but, int joueur_id);

	/**
	 * Avance un match (en cours) a la ieme minute de jeu
	 * 
	 * @param match_id
	 *            identidiant du match a avancer
	 * @param minute
	 *            minute jouee
	 */
	public void avancerMatch(int match_id, int minute);

	/**
	 * Permet de debutter un match, a une date donnee
	 * 
	 * @param match_id
	 *            identifiant du match
	 * @param dateTime
	 *            date et heure de debut du match, au format "Date Heure"
	 */
	public void debuterMatch(int match_id, String dateTime);

	/**
	 * Permet de finir un match du tournoi
	 * 
	 * @param match_id
	 *            match_id identifiant du match
	 */
	public void finirMatch(int match_id);

	/**
	 * Permet de fixer les recontres du tournoi Si aucun tour n'a ete cree,
	 * donne un numero aleatoire a chaque equipe et les fait s'affronter dans
	 * des matchs Si un tour est en cour, ne fait rien Sinon, si tous les matchs
	 * sont deja finits, debute un nouveau tour en fesnt s'affronter les
	 * gagnants
	 */
	public void fixerRencontres();

	/**
	 * Retourne tous les arbitres du tournoi
	 * 
	 * @return La liste des arbitres du tournoi
	 */
	public List<Arbitre> getAllArbitres();

	/**
	 * Retourne toutes les equipes du tournoi
	 * 
	 * @return La liste des equipes du tournoi
	 */
	public List<Equipe> getAllEquipes();

	/**
	 * Retourne tous les matchs du tournoi
	 * 
	 * @return La liste des matchs du tournoi
	 */
	public List<Match> getAllMatch();

	/**
	 * Retourne tous les tours du tournoi
	 * 
	 * @return La liste des tours du tournoi
	 */
	public List<Tour> getAllTour();

	/**
	 * Recupere une equipe en fonction de son identifiant
	 * 
	 * @param id_equipe
	 *            identifiant de l'equipe
	 * @return l'equipe
	 */
	public Equipe getEquipeById(int id_equipe);

	/**
	 * Retourne tous les matchs qui sont dans l'etat "etat"
	 * 
	 * @param etat
	 *            etat du match, peut etre PREVU, EN_COURS ou FINIT
	 * @return La liste des matchs PREVU, EN_COURS ou FINIT
	 */
	public List<Match> getMatchByEtat(int etat);

	/**
	 * Recupere un match en fonction de son identifiant
	 * 
	 * @param id_match
	 *            identifiant du match
	 * @return le match dont l'identifiant est id_match
	 */
	public Match getMatchById(int id_match);

	/**
	 * Recupere un tour en fonction de son numero
	 * 
	 * @param numero
	 *            numero du tour
	 * @return le tour
	 */
	public Tour getTourByNumero(int numero);

	/**
	 * Recupere le tournoi
	 * 
	 * @return le tournoi
	 */
	public Tournoi getTournoi();

	/**
	 * Passe un match en l'etat prolongation
	 * 
	 * @param match_id
	 *            identifiant du match a passer en prolongations
	 */
	public void matchToProlongation(int match_id);

	/**
	 * Passe un match en l'etat tir au buts
	 * 
	 * @param match_id
	 *            identifiant du match a passer en tirs au buts
	 */
	public void matchToTirAuBut(int match_id);
}
